Модуль:CharInfo
В webtoon, возраст меняется с каждым годом. -- -- Этот модуль должен облегчить процесс обновления 30+ персонаж страниц -- всякий раз, когда изменение происходит. -- До сих пор: -- 1. возвращает год рождения человеческого персонажа -- 2. возвращает возраст человеческого персонажа, учитывая год -- 3. возвращает "да", если персонаж мертв -- -- может быть, другие данные, кроме возраста будут добавлены сюда позже. -- local p = {} local chardat = mw.loadData( 'Модуль:CharInfo/chardat' ) function p.charData( frame ) local charName = frame.args1 -- имя персонажа local outputType = frame.args2 -- область (год рождения, возраст, инфобокс) local year = frame.args3 -- год local outputTxt = nil -- данные (D998, 48, нил) -- Год рождения (например D995, N0) if (outputType 'birthyear') then outputTxt = chardatcharName.birthyear -- (DXXX|NXX|неизвестно|нил) return outputTxt end -- Вкладки по возрасту (персонаж инфобокс) : N15 / N16 / N23 -- или иногда без вкладок, просто возраст if (outputType 'tabs-age') then -- это персонаж в таблице? if (chardatcharName nil) then return nil end -- проверьте особые случаи, например, шахматных -> миллиарды лет local specialage = chardatcharName.specialage if (specialage ~= nil) then return specialage end -- без сезонного поля? Это должен быть особый случай или игнорируются local season = tonumber(chardatcharName.season ) if (season nil) then return nil end -- в противном случае, только людей нужно применять local race = chardatcharName.race if (race 'p') or (race 'q') or (race 'h') then local birthyear = chardatcharName.birthyear if (birthyear nil) or (birthyear 'неизвестно') then return nil end local deathyear = chardatcharName.deathyear local dnumber = 1000000 local bletter,bnumber = birthyear:match('^(%w)(%d+)$') if (deathyear ~= nil) then dnumber = tonumber(deathyear :match('^.(%d+)$')) end local tabs = { 15, 16, 23 } local age = nil local year = nil outputTxt = '' -- or '{{#tag:tabber|' for i, _ in ipairs( tabs ) do year = tabsi -- если персонаж впервые появился во 2 сезоне, не показывают от 15. -- Если умер персонаж во 2 сезоне, не показывают позднем возрасте. if (season <= i) and (dnumber >= year) then if (i > 1) then outputTxt = outputTxt .. '|-|' end outputTxt = outputTxt .. 'N' .. year .. '=' if (bletter 'N') then -- перс родился в NX age = 1 + year - bnumber -- в N16, то кто-то родился в N0 is 17 лет. возраст= 1+ryear-byear else -- перс родился в DXXX age = 1001 + year - bnumber -- в N15, кто-то родился в D996 is 20 лет. возраст= 1001 + reqyear - byear end outputTxt = outputTxt .. age if (race 'q') then outputTxt = outputTxt .. ' (на вид примерно ' .. math.floor(age / 2) .. ')' elseif (race 'h') then outputTxt = outputTxt .. ' (на вид примерно ' .. math.floor(age / 4) .. ')' end end end outputTxt = outputTxt .. '' return frame:preprocess(outputTxt) end end -- маг рейтинг/ранг вкладок (персонаж инфобокс) -- или иногда без вкладок, просто ранг if (outputType 'tabs-magic') then -- персонаж в таблице? if (chardatcharName nil) then return nil end -- проверьте особые случаи, например ? local specialrank = chardatcharName.specialrank if (specialrank ~= nil) then return specialrank end local magic = chardatcharName.magic if (magic ~= nil) then outputTxt = '' -- or '{{#tag:tabber|' for i, _ in ipairs( magic ) do if (i > 1) then outputTxt = outputTxt .. '|-|' end outputTxt = outputTxt .. magici1 .. '=Ранг: ' .. ((magici2 ~= '') and magici2 or 'неизвестно') .. ' Рейтинг: ' .. ((magici3 ~= nil) and ('#' .. magici3) or 'неизвестно') end outputTxt = outputTxt .. '' -- return (outputTxt) return frame:preprocess(outputTxt) end return nil end return outputTxt end return p --Category:Модули Луа